import {
  IsString,
  IsNumber,
  IsOptional,
  IsNotEmpty,
  IsEmail,
  IsUrl,
  IsArray,
  IsObject,
} from 'class-validator';
import { ApiProperty } from '@nestjs/swagger';
// import { validateEvent } from '@wwjCommon/event/contract-validator';
import { ParseDiyFormPipe } from '@wwjCommon/pipes/parse-diy-form.pipe';
// import { JsonTransformPipe } from '@wwjCommon/validation/pipes/json-transform.pipe';

/**
 * DiyDto - 数据传输对象
 * 基于真实PHP验证器规则生成，禁止假设字段
 * 使用Core层基础设施：契约验证、管道验证、Swagger文档
 */
export class DiyDto {
  @ApiProperty({ description: 'title' })
  @IsNotEmpty()
  @IsString()
  title: string;

  @ApiProperty({ description: 'name' })
  @IsNotEmpty()
  @IsString()
  name: string;

  @ApiProperty({ description: 'type' })
  @IsNotEmpty()
  @IsString()
  type: string;

  @ApiProperty({ description: 'value' })
  @IsNotEmpty()
  @IsString()
  value: string;

  @ApiProperty({ description: 'is_default' })
  @IsNumber()
  is_default: number;
}

/**
 * DiyDto 验证器类
 * 使用Core层contractValidator进行验证 (对应Java的Validator接口)
 * 使用Core层基础设施：契约验证、管道验证
 */
export class DiyDtoValidator {
  /**
   * 验证数据
   * 使用Core层统一验证体系
   */
  static validate(data: DiyDto): void {
    // 调用Core层contractValidator进行验证
    validateEvent('diy.diy', data);
  }

  /**
   * 验证场景 - 基于真实PHP的$scene
   */
  static validateAdd(data: DiyDto): void {
    // 基于真实PHP add场景验证规则
    this.validate(data);
  }

  static validateEdit(data: DiyDto): void {
    // 基于真实PHP edit场景验证规则
    this.validate(data);
  }
}

export class CreateDiyDto {
  // 字段定义需要基于真实PHP验证器解析
  // 禁止假设字段
  // 使用Core层基础设施：class-validator装饰器、Swagger文档
}

export class UpdateDiyDto {
  // 字段定义需要基于真实PHP验证器解析
  // 禁止假设字段
  // 使用Core层基础设施：class-validator装饰器、Swagger文档
}

export class QueryDiyDto {
  // 字段定义需要基于真实PHP验证器解析
  // 禁止假设字段
  // 使用Core层基础设施：class-validator装饰器、Swagger文档
}
